package cn.ljy.authority.dao.mapper;

import cn.ljy.authority.dao.BaseMapper;
import cn.ljy.authority.model.SysUser;
import cn.ljy.authority.model.SysWechatUser;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

import java.io.Serializable;

@Repository
public interface SysUserMapper extends BaseMapper<SysUser> {
    /**
     * 通过账户名和密码查找符合的账户数量
     * @param username 账户名
     * @param password 密码
     * @return 返回找到的账户数
     */
    @Select("select count(1) from sys_user where username=#{username} and password=#{password}")
    int countByUsernameAndPassword(String username,String password);

    /**
     * 根据账户名查找唯一对应的账户
     * @param username
     * @return 如果没有找到返回null
     */
    @Select("select * from sys_user where username=#{username}")
    SysUser findOneByUsername(String username);

    /**
     * 根据账户名查找唯一对应的账户id
     * @param username
     * @return 如果没有找到返回null
     */
    @Select("select id from sys_user where username=#{username}")
    Long findIdByUsername(String username);

    /**
     * 根据账户名查找唯一对应的账户id
     * @param tel
     * @return 如果没有找到返回null
     */
    @Select("select id from sys_user where tel=#{tel}")
    Long findIdByTel(String tel);


    /**
     * 根据账户名查找数据库中重名的数量
     * @param username
     * @return 返回重名数
     */
    @Select("select count(1) from sys_user where username=#{username}")
    int countByUsername(String username);

    /**
     * 根据网名查找数据库中重名的数量
     * @param nickName
     * @return 返回重名数
     */
    @Select("select count(1) from sys_user where nick_name=#{nickName}")
    int countByNickName(String nickName);

    /**
     * 根据账户名查找数据库中重名的数量
     * @param username
     * @return 返回重名数
     */
    @Select("select count(1) from sys_user where username=#{username} and id!=#{id}")
    int countByUsernameAndIdNot(String username,Serializable id);

    /**
     * 根据网名查找数据库中重名的数量
     * @param nickName
     * @return 返回重名数
     */
    @Select("select count(1) from sys_user where nick_name=#{nickName} and id!=#{id}")
    int countByNickNameAndIdNot(String nickName, Serializable id);


    //===============================部门===========================================//
    /**
     * 将账户批量修改部门
     * @param userIds 账户的id集合
     * @param departmentId 部门
     * @return 返回修改成功的数量
     */
    int updateByIdsAndDepartmentId(long[] userIds,long departmentId);

    SysWechatUser selectByOpenId(String openId);


}
